<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>call源码</title>
</head>

<body>

    <button>我</button>
    <button>我</button>
    <button>我</button>
    <script>
        // call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数
        // 普通函数的this指向
        //函数的不同调用方式决定了this的指向不同
        //1. 普通函数 this指向window
        // function fn() {
        //     console.log('普通函数的this->' + this);
        // }
        //这里我们调用函数fn(),实际上是window.fn()，只不过是window可以省略，所以this会指向window
        // fn();
        //普通函数的this->Window
        //输出  普通函数的this->[object Window]
        //2. 构造函数调用 this指向Star的实例对象，原型对象里的this也是指向Star实例对象
        // function geyao() {
        //     console.log('构造函数this指向->' + this);
        // }
        // var ldh = new geyao();
        //构造函数this指向->Star
        //输出构造函数this指向->[object Object]
        //对象方法
        //3. 对象方法调用 this指向对象obj本身
        // var obj = {
        //     sayHi: function () {
        //         console.log('对象方法this指向->' + this);
        //     }
        // }
        // obj.sayHi(); 
        //对象方法this指向->Object
        //对象方法this指向->[object Object]
        // 4. 绑定事件函数 this指向的是函数的调用者即btn这个按钮的对象
        // var btn = document.querySelector('button');
        // btn.onclick = function () {
        //     console.log("绑定事件函数this指向->", this);
        // }
        //当点击按钮时会输出：
        //绑定事件函数this指向->button
        //绑定事件函数this指向<button>确定</button>
        //5. 定时器函数this指向的是window 实际上setTimeout也是由window调用的即window.setTimeout...
        // setTimeout(function () {
        //     console.log('定时器函数this指向->' + this);
        // }, 500);
        //500毫秒后输出：
        //定时器函数this指向->Window
        //定时器函数this指向->[object Window]
        //6. 立即执行函数this指向依然是window 立即执行函数虽然是立即执行的，但实际上也是由window调用的
        // (function () {
        //     console.log('立即执行函数this指向->' + this);
        // })()
        //立即执行函数this指向->Window
        //立即执行函数this指向->[object Window]
       

    </script>
</body>

</html>